**** Project: HOW PREJUDICE SHAPES PUBLIC PERCEPTIONS OF MINORITY-ORGANIZED SPACES: THE CASE OF COMMUNITY EDUCATION
**** Published in: Journal of Ethnic and Migration Studies
**** Study: Experimental Study
**** Authors: Julia Steenwegen & Maurits J. Meijers
**** Date: 26 March, 2024

import spss using "data.sav", clear

**************************
*** Select Variables ***
**************************
keep StartDate EndDate Status Progress Duration__in_seconds_ Finished RecordedDate ResponseId gender birthyear education provincie employment income urban_rural migration_background screener1_1 screener1_2 screener1_3 screener1_4 screener1_5 screener1_6 screener1_7 vote left_right pol_interest screener2_1 screener2_2 screener2_3 screener2_4 screener2_5 screener2_6 com_ed_treatment1 com_ed_treatment2 com_ed_treatment3 com_ed_treatment4 com_ed_treatment5 com_ed_treatment6 dv1 dv2 dv3 comed_check1 comed_check2  exposure_1 exposure_2 exposure_3 exposure_6 multiculturalism_1 multiculturalism_2 multiculturalism_3 multiculturalism_4 multiculturalism_5 age_6_set edu_3_set groep weight_dv weight_dvposthoc issue_importance_immi vote

keep if dv1 != . // drop all observations not in Experimental Study

**************************
*** Creating Variables ***
**************************

* Create Community Treatment Variable
gen community_treatment = .
replace community_treatment = 1 if com_ed_treatment1 == 1
replace community_treatment = 1 if com_ed_treatment2 == 1

replace community_treatment = 2 if com_ed_treatment3 == 1
replace community_treatment = 2 if com_ed_treatment4 == 1

replace community_treatment = 3 if com_ed_treatment5 == 1
replace community_treatment = 3 if com_ed_treatment6 == 1

* Create Purpose Treatment Variable
gen purpose_treatment = .
replace purpose_treatment = 0 if com_ed_treatment2 == 1
replace purpose_treatment = 0 if com_ed_treatment4 == 1
replace purpose_treatment = 0 if com_ed_treatment6 == 1

replace purpose_treatment = 1 if com_ed_treatment1 == 1
replace purpose_treatment = 1 if com_ed_treatment3 == 1
replace purpose_treatment = 1 if com_ed_treatment5 == 1


* Left-Right
*making DK/prefer not to say --> middle value
gen left_right2 = left_right
replace left_right2 = 5 if left_right == -99 

* Political Interest 
*  making DK/prefer not to say --> missing
gen pol_interest1 = pol_interest
replace pol_interest1 = . if pol_interest == -99

gen pol_interest2 = pol_interest
replace pol_interest2 = 3 if pol_interest == -99 

* Migration background  
gen migration_background_new = migration_background
replace migration_background_new = . if migration_background_new == -99

* Urban_rural
gen urban_rural_new = urban_rural
replace urban_rural_new = . if urban_rural_new == -99

* Education
encode edu_3_set, gen(edu3cat)

* Age 
gen age = 2023 - birthyear

* Income
gen income1 = income
replace income1 = . if income == -88 |  income == -99 

*Exposure
gen exposure = .
replace exposure = 0 if exposure_6 == 1
replace exposure = 1 if exposure_1 == 1 | exposure_2  == 1 | exposure_3  == 1 

gen exposure1 = .
replace exposure1 = 0 if exposure == 0
replace exposure1 = 1 if exposure_1 == 1 
replace exposure1 = 2 if exposure_2 == 1 
replace exposure1 = 3 if exposure_3  == 1 


* factor variable for multiculturalism
factor  multiculturalism_1 multiculturalism_2 multiculturalism_3 multiculturalism_4 multiculturalism_5 [aweight=weight_dv], ipf mineigen(1) 

* Shows multiculturalism_3 doesnt scale well, factor with 4 vars only with aweight
factor  multiculturalism_1 multiculturalism_2  multiculturalism_4 multiculturalism_5 [aweight=weight_dv], ipf mineigen(1) 
rotate, blanks(.5) orthogonal varimax
predict multiculturalism_factor	
* --> higher values indicate support for multiculturalism

gen multicult_fst = (multiculturalism_factor - -2.071146) / (1.617819 -  -2.071146)

gen multicult_fst10 = multicult_fst*10

* Vote choice
gen vote_new = .
replace vote_new = 1 if vote == 7 // PVDA
replace vote_new = 2 if vote == 6 // Groen
replace vote_new = 3 if vote == 5 // Vooruit
replace vote_new = 4 if vote == 3 // CD&V
replace vote_new = 5 if vote == 4 // O-VLD
replace vote_new = 6 if vote == 1 // NVA
replace vote_new = 7 if vote == 2 // VB


* Attention check
gen attention = 0
replace attention = 1 if screener2_3 == 1 & screener2_5 == 1

* Employment1 (--> negative values positive for factor)
gen employment1 = employment
replace employment1 = 10 if employment1 == -88

* Income2 (--> negative values positive for factor)
gen income2 = income
replace income2 = 88 if income2 == -88
replace income2 = 99 if income2 == -99

* Vote
gen vote1 = vote
replace vote1 = 99 if vote == -99
replace vote1 = 88 if vote == -88
replace vote1 = 77 if vote == -77

gen manipulation = 0
replace manipulation = 1 if (comed_check1 == 1 & community_treatment == 1 | comed_check1 == 2 & 	community_treatment == 2 | comed_check1 == 3 & community_treatment == 3 ) & (comed_check2 == 1 & purpose_treatment == 1 | comed_check2 == 2 & purpose_treatment == 0)

**************************
*** Labeling Variables ***
**************************
label variable community_treatment "Community"
label variable purpose_treatment "Purpose"

label variable multiculturalism_factor "Multicultural Recognition"
label variable multicult_fst10 "Multicultural Recognition"
label variable left_right2 "Left-Right Self-Placement"
label variable edu3cat "Education"
label variable gender "Sex"
label variable age "Age"
label variable urban_rural_new "Residency"
label variable migration_background_new "Migration Background"
label variable exposure "Exposure"
label var attention "Attentive"
label define attlabel 0 "Not Attentive" 1 "Attentive"
label values attention attlabel

label var manipulation "Manipulation Successful"
label define maniplabel 0 "Manipulation Unsuccessful" 1 "Manipulation Successful"
label values manipulation maniplabel

label define edulabel 1 "Low Education" 2 "Mid Education" 3 "High Education"
label values edu3cat edulabel

label define genderlabel 1 "Male" 2 "Female" 
label values gender genderlabel

label define urbanrurallabel 1 "Large City" 2 "Suburbs" 3 "Town" 4 "Village" 5 "Countryside"
label values urban_rural_new urbanrurallabel

label define mblabel 1 "Migration Background" 2 "No Migration Background" 
label values migration_background_new mblabel

label define exposurelbl 0 "No Exposure "1 "Myself" 2 "Know Somebody" 3 "Aware" 
label values exposure1 exposurelbl

label define communitylabel 1 "Italian Community" 2 "Chinese Community" 3 "Moroccan Community"
label values community_treatment communitylabel

label define purposelabel 0 "Math Tutoring" 1 "Heritage Language" 
label values purpose_treatment purposelabel

label define employment1lbl 1 "Full-time employed" 2 "Part-time employed" 3 "Self-employed entrepreneur" 4 "Unemployed, looking for work" 5 "Unemployed, not looking for work" 6 "Homemaker" 7 "Pensioner" 8 "Student" 9 "Incapacitated to work" 10 "Prefer not to say"
label values employment1 employment1lbl
 
label define income2lbl 1 "€500 or less" 2 "€501-€1000" 3 "€1001-€1500" 4 "€1501-€2000" 5 "€2001-€2500" 6 "€2501-€3000" 7 " €3001-€3500" 8 "€3501-€4500" 9 "€4501-€7500" 10 " €7501 or more" 88 "Prefer not to say" 99 "Don't Know"
label values income2 income2lbl

label define vote1lbl 1 "N-VA" 2 "Vlaams Belang" 3 "CD&V" 4 "Open Vld" 5 "Vooruit" 6 "Groen" 7 "PVDA" 8 "Other party" 9 "Blank" 10 "Did not vote" 77 "Not eligible" 88 "Prefer not to say" 99 "Don't Know"
label values vote1 vote1lbl

label define votenewlbl 1 "PVDA" 2 "Groen" 3 "Vooruit" 4 "CD&V" 5 "OpenVld" 6 "N-VA" 7 "VB" 
label values vote_new votenewlbl

label var issue_importance_immi "Immigration Salience"

*******************************************
*** Figures and Tables in Manuscript ***
*******************************************

**** Figure 2 ****
estimates clear 
* dv1 = in general
reg dv1 i.community_treatment i.purpose_treatment 
estimates store dv1
* dv2 = kids
reg dv2 i.community_treatment i.purpose_treatment
estimates store dv2
* dv3 = society
reg dv3 i.community_treatment i.purpose_treatment
estimates store dv3

coefplot dv1 dv2 dv3 , drop(_cons) xline(0, lpattern(shortdash)) yline(3.5, lcolor(gray) lpattern(longdash)) coeflabels(, labsize(medium) wrap(20)) yscale(lstyle(none)) baselevels legend(position(6) size(medium) rows(1))  ysize(2) xsize(5)  ///
     p1(label(Overall Evaluation)  mcolor(black) ciopts(color(black)) msymbol(S)  xlabel(, labsize(medlarge)) msize(medlarge) )       ///
	 p2(label(Children) mcolor(black) ciopts(lpattern(longdash) color(black)) symbol(D) xlabel(, labsize(medlarge)) msize(medlarge) )       ///
	 p3(label(Flemish society) mcolor(black) ciopts(lpattern(shortdash) color(black)) msymbol(T)  xlabel(, labsize(medlarge)) msize(medlarge) )      

**** Figure 3 ****
* Purpose per community_treatment	 
estimates clear 

reg dv1 i.purpose_treatment if community_treatment == 1
est store dv1c1
reg dv2 i.purpose_treatment  if community_treatment == 1
est store dv2c1
reg dv3 i.purpose_treatment if community_treatment == 1
est store dv3c1

reg dv1 i.purpose_treatment if community_treatment == 2
est store dv1c2
reg dv2 i.purpose_treatment if community_treatment == 2
est store dv2c2
reg dv3 i.purpose_treatment if community_treatment == 2
est store dv3c2

reg dv1 i.purpose_treatment if community_treatment == 3
est store dv1c3
reg dv2 i.purpose_treatment if community_treatment == 3
est store dv2c3
reg dv3 i.purpose_treatment if community_treatment == 3
est store dv3c3

coefplot dv1c1  dv2c1  dv3c1, bylabel(Italian Community)  ///
	|| dv1c2  dv2c2  dv3c2, bylabel(Chinese Community) ///
	|| dv1c3  dv2c3  dv3c3, bylabel(Moroccan Community) ///
	  p1(label(Overall Evaluation)  mcolor(black) ciopts(color(black)) msymbol(S)  )       ///
	 p2(label(Children) mcolor(black) ciopts(lpattern(longdash) color(black)) msymbol(D) )       ///
	 p3(label(Flemish society) mcolor(black) ciopts(lpattern(shortdash) color(black)) msymbol(T)  )   ///
		drop(_cons) xline(0) base  yscale(lstyle(none)) legend(position(6) rows(1)) 	

**** Figure 4 ****
** Left-Right interaction X community_treatment
estimates clear 
reg dv1 i.community_treatment##c.left_right2 i.purpose_treatment 
margins community_treatment, at(left_right2 =(0(2)10))
marginsplot, title("") ytitle("Predicted Evaluation of Community Education") recast(line) recastci(rarea) legend(position(6) row(1)) 

** Multiculturalism interaction X community_treatment
estimates clear 
reg dv1 i.community_treatment##c.multicult_fst10 i.purpose_treatment 
margins community_treatment, at(multicult_fst10 =(0(2)10))
marginsplot, title("") ytitle("Predicted Evaluation of Community Education") recast(line) recastci(rarea) legend(position(6) row(1))

grc1leg leftrightinteraction2.gph multicultiinteraction2.gph 		

**** Figure 5 ****
*party vote choice X community_treatment
estimates clear 
reg dv1 i.community_treatment##i.vote_new i.purpose_treatment 
margins vote_new#community_treatment
marginsplot, title("") ytitle("Predicted Evaluation of Community Education") recast(scatter) xtitle("") legend(position(6) row(1)) xlabel(,angle(90))

mplotoffset, offset(0.2) recast(scatter) title("") ytitle("Predicted Evaluation of Community Education") xtitle("") legend(position(6) row(1)) xlabel(,angle(0))

		
*******************************************
*** Figures and Tables in Appendix ***
*******************************************

**** Table A1.2. ****
* Tabs with weights for table
tab gender
tab gender [aweight= weight_dv]
tab gender [aweight= weight_dvposthoc]

tab edu_3_set
tab edu_3_set [aweight= weight_dv]
tab edu_3_set [aweight= weight_dvposthoc]

tab age_6_set
tab age_6_set [aweight= weight_dv]
tab age_6_set [aweight= weight_dvposthoc]

**** Table A4.1. ****
*** Conduct Balance Test***
estimates clear
mlogit community_treatment gender age i.edu3cat left_right2 pol_interest2 i.employment1 i.income2 i.vote1 
*** --> no unbalanced covariates
eststo mlogit1
esttab using balance1.rtf, b(3) se(3) mtitles label compress replace 

**** Table A4.1. ****
estimates clear
mlogit purpose_treatment gender age i.edu3cat left_right2 pol_interest2 i.employment1 i.income2 i.vote1 
*** --> no unbalanced covariates
eststo mlogit2
esttab using balance2.rtf, b(3) se(3) wide mtitles label compress replace 

**** Table A4.3 ****
*OLS regression table for appendix of main models
estimates clear 
reg dv1 i.community_treatment i.purpose_treatment 
estimates store dv1
reg dv2 i.community_treatment i.purpose_treatment
estimates store dv2
reg dv3 i.community_treatment i.purpose_treatment
estimates store dv3

esttab dv1 dv2 dv3 using main_model.rtf, b(3) se(3) label compress replace 

** OLS regression table for appendix of main models with Chinese community as baseline (not shown)
estimates clear 
reg dv1 b2.community_treatment i.purpose_treatment 
estimates store dv1
reg dv2 b2.community_treatment i.purpose_treatment
estimates store dv2
reg dv3 b2.community_treatment i.purpose_treatment
estimates store dv3

esttab dv1 dv2 dv3 using main_model_chinesebase.rtf, b(3) se(3) label compress replace 

**** Figure A4.1 ****
* Main OLS models with weights	 
estimates clear 
reg dv1 i.community_treatment i.purpose_treatment [pweight=weight_dv]
estimates store dv1
reg dv2 i.community_treatment i.purpose_treatment [pweight=weight_dv]
estimates store dv2
reg dv3 i.community_treatment i.purpose_treatment [pweight=weight_dv]
estimates store dv3
coefplot dv1 dv2 dv3 , drop(_cons) title("Weight 1") xline(0, lpattern(shortdash)) yline(3.5, lcolor(gray) lpattern(longdash)) coeflabels(, wrap(20)) yscale(lstyle(none)) baselevels legend(position(6)  rows(1))   saving(weight1, replace)  ///
     p1(label(Overall Evaluation)  mcolor(black) ciopts(color(black)) msymbol(S)   )       ///
	 p2(label(Children) mcolor(black) ciopts(lpattern(longdash) color(black)) symbol(D)  )       ///
	 p3(label(Flemish society) mcolor(black) ciopts(lpattern(shortdash) color(black)) msymbol(T)   )      

estimates clear 
reg dv1 i.community_treatment i.purpose_treatment [pweight=weight_dvposthoc]
estimates store dv1
reg dv2 i.community_treatment i.purpose_treatment [pweight=weight_dvposthoc]
estimates store dv2
reg dv3 i.community_treatment i.purpose_treatment [pweight=weight_dvposthoc]
estimates store dv3
coefplot dv1 dv2 dv3 , drop(_cons) title("Weight 2", ) xline(0, lpattern(shortdash)) yline(3.5, lcolor(gray) lpattern(longdash)) coeflabels(, wrap(20)) yscale(lstyle(none)) baselevels legend(position(6) rows(1))  saving(weight2, replace)  ///
     p1(label(Overall Evaluation)  mcolor(black) ciopts(color(black)) msymbol(S)   )       ///
	 p2(label(Children) mcolor(black) ciopts(lpattern(longdash) color(black)) symbol(D)  )       ///
	 p3(label(Flemish society) mcolor(black) ciopts(lpattern(shortdash) color(black)) msymbol(T)   )      
  
grc1leg weight1.gph weight2.gph
	 
**** Figure A4.2 ****
* Manipulation Check: Method 1
estimates clear 
reg dv1 i.community_treatment i.purpose_treatment i.manipulation
estimates store dv1
reg dv2 i.community_treatment i.purpose_treatment  i.manipulation
estimates store dv2
reg dv3 i.community_treatment i.purpose_treatment  i.manipulation
estimates store dv3

coefplot dv1 dv2 dv3 , drop(_cons) xline(0, lpattern(shortdash)) yline(3.5 5.5, lcolor(gray) lpattern(longdash)) coeflabels(, labsize(medium) wrap(20)) yscale(lstyle(none)) baselevels legend(position(6) size(medium) rows(1))  ysize(2) xsize(5)  ///
     p1(label(Overall Evaluation)  mcolor(black) ciopts(color(black)) msymbol(S)  xlabel(, labsize(medlarge)) msize(medlarge) )       ///
	 p2(label(Children) mcolor(black) ciopts(lpattern(longdash) color(black)) symbol(D) xlabel(, labsize(medlarge)) msize(medlarge) )       ///
	 p3(label(Flemish society) mcolor(black) ciopts(lpattern(shortdash) color(black)) msymbol(T)  xlabel(, labsize(medlarge)) msize(medlarge) )      

**** Figure A4.3 ****
* Manipulation Check: Method 2
estimates clear 
reg dv1 i.community_treatment i.purpose_treatment if manipulation==1
estimates store dv1ms
reg dv2 i.community_treatment i.purpose_treatment  if   manipulation==1
estimates store dv2ms
reg dv3 i.community_treatment i.purpose_treatment  if  manipulation==1
estimates store dv3ms

coefplot dv1ms dv2ms dv3ms , drop(_cons) title("Manipulation Check Successful") yline(3.5, lcolor(gray)) xline(0, lpattern(shortdash))coeflabels(, wrap(20)) yscale(lstyle(none)) baselevels legend(position(6)  rows(1))   saving(man1, replace)  ///
     p1(label(Overall Evaluation)  mcolor(black) ciopts(color(black)) msymbol(S)   )       ///
	 p2(label(Children) mcolor(black) ciopts(lpattern(longdash) color(black)) symbol(D)  )       ///
	 p3(label(Flemish society) mcolor(black) ciopts(lpattern(shortdash) color(black)) msymbol(T)   )      

estimates clear 
reg dv1 i.community_treatment i.purpose_treatment  if manipulation==0
estimates store dv1mu
reg dv2 i.community_treatment i.purpose_treatment  if  manipulation==0
estimates store dv2mu
reg dv3 i.community_treatment i.purpose_treatment  if  manipulation==0
estimates store dv3mu

coefplot dv1mu dv2mu dv3mu , drop(_cons) title("Manipulation Check Unsuccessful", ) yline(3.5, lcolor(gray)) xline(0, lpattern(shortdash))   coeflabels(, wrap(20)) yscale(lstyle(none)) baselevels legend(position(6) rows(1))  saving(man0, replace)  ///
     p1(label(Overall Evaluation)  mcolor(black) ciopts(color(black)) msymbol(S)   )       ///
	 p2(label(Children) mcolor(black) ciopts(lpattern(longdash) color(black)) symbol(D)  )       ///
	 p3(label(Flemish society) mcolor(black) ciopts(lpattern(shortdash) color(black)) msymbol(T)   )      
grc1leg man1.gph man0.gph	 

**** Figure A4.4 ****
* Attention Check: Method 1
estimates clear 
reg dv1 i.community_treatment i.purpose_treatment i.attention
estimates store dv1
reg dv2 i.community_treatment i.purpose_treatment  i.attention
estimates store dv2
reg dv3 i.community_treatment i.purpose_treatment  i.attention
estimates store dv3

coefplot dv1 dv2 dv3 , drop(_cons) xline(0, lpattern(shortdash)) yline(3.5, lcolor(gray) lpattern(longdash)) coeflabels(, labsize(medium) wrap(20)) yscale(lstyle(none)) baselevels legend(position(6) size(medium) rows(1))  ysize(2) xsize(5)  ///
     p1(label(Overall Evaluation)  mcolor(black) ciopts(color(black)) msymbol(S)  xlabel(, labsize(medlarge)) msize(medlarge) )       ///
	 p2(label(Children) mcolor(black) ciopts(lpattern(longdash) color(black)) symbol(D) xlabel(, labsize(medlarge)) msize(medlarge) )       ///
	 p3(label(Flemish society) mcolor(black) ciopts(lpattern(shortdash) color(black)) msymbol(T)  xlabel(, labsize(medlarge)) msize(medlarge) )      

**** Figure A4.5 ****
* Attention Check: Method 2
estimates clear 
reg dv1 i.community_treatment i.purpose_treatment if attention==1
estimates store dv1a
reg dv2 i.community_treatment i.purpose_treatment  if   attention==1
estimates store dv2a
reg dv3 i.community_treatment i.purpose_treatment  if  attention==1
estimates store dv3a

coefplot dv1a dv2a dv3a , drop(_cons) title("Attentive Sample") xline(0, lpattern(shortdash)) yline(3.5, lcolor(gray) lpattern(longdash)) coeflabels(, wrap(20)) yscale(lstyle(none)) baselevels legend(position(6)  rows(1))   saving(att1, replace)  ///
     p1(label(Overall Evaluation)  mcolor(black) ciopts(color(black)) msymbol(S)   )       ///
	 p2(label(Children) mcolor(black) ciopts(lpattern(longdash) color(black)) symbol(D)  )       ///
	 p3(label(Flemish society) mcolor(black) ciopts(lpattern(shortdash) color(black)) msymbol(T)   )      

estimates clear 
reg dv1 i.community_treatment i.purpose_treatment  if attention==0
estimates store dv1na
reg dv2 i.community_treatment i.purpose_treatment  if  attention==0
estimates store dv2na
reg dv3 i.community_treatment i.purpose_treatment  if  attention==0
estimates store dv3na

coefplot dv1na dv2na dv3na , drop(_cons) title("Non-Attentive Sample", ) xline(0, lpattern(shortdash)) yline(3.5, lcolor(gray) lpattern(longdash)) coeflabels(, wrap(20)) yscale(lstyle(none)) baselevels legend(position(6) rows(1))  saving(att0, replace)  ///
     p1(label(Overall Evaluation)  mcolor(black) ciopts(color(black)) msymbol(S)   )       ///
	 p2(label(Children) mcolor(black) ciopts(lpattern(longdash) color(black)) symbol(D)  )       ///
	 p3(label(Flemish society) mcolor(black) ciopts(lpattern(shortdash) color(black)) msymbol(T)   )      
  
grc1leg att1.gph att0.gph	 

**** Figure A5.1 ****
** Left-Right interaction X purpose_treatment
estimates clear 
reg dv1 i.community_treatment i.purpose_treatment##c.left_right2 
margins i.purpose_treatment , at(left_right2 =(0(2)10))
marginsplot, title("") ytitle("Predicted Evaluation of Community Education") recast(line) recastci(rarea) legend(position(6) row(1) )

** Multiculturalism interaction X i.purpose_treatment 
estimates clear 
reg dv1 i.community_treatment i.purpose_treatment##c.multicult_fst10 
margins i.purpose_treatment , at(multicult_fst10 =(0(2)10))
marginsplot, title("") ytitle("Predicted Evaluation of Community Education") recast(line) recastci(rarea) legend(position(6) row(1))

grc1leg lr_purpose.gph multicult_purpose.gph 

**** Figure A5.2 ****
** Immigration salience  X community_treatment
estimates clear 
reg dv1 i.community_treatment##c.issue_importance_immi i.purpose_treatment 
margins community_treatment, at(issue_importance_immi =(0(2)10))
marginsplot, title("") ytitle("Predicted Evaluation of Community Education") recast(line) recastci(rarea) legend(position(6) row(1))

** Immigration salience  X i.purpose_treatment 
estimates clear 
reg dv1 i.community_treatment i.purpose_treatment##c.issue_importance_immi 
margins i.purpose_treatment, at(issue_importance_immi =(0(2)10))
marginsplot, title("") ytitle("Predicted Evaluation of Community Education") recast(line) recastci(rarea) legend(position(6) row(1))

graph combine immisalience2.gph salience_purpose.gph

**** Figure A5.3 ****
*per party vote choice X purpose_treatment
estimates clear 
reg dv1 i.community_treatment i.purpose_treatment##i.vote_new 
margins vote_new#purpose_treatment 
marginsplot, title("") ytitle("Predicted Evaluation of Community Education") recast(scatter) xtitle("") legend(position(6) row(1)) xlabel(,angle(90))

mplotoffset, offset(0.2) recast(scatter) title("") ytitle("Predicted Evaluation of Community Education") xtitle("") legend(position(6) row(1)) xlabel(,angle(0))
